home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / DFUE / CONNECT / HSMODA01.LZH / RSVF_COO.TXT < prev    next >
Encoding:
Text File  |  1993-11-21  |  8.1 KB  |  206 lines

  1. Datenstruktur zur Abfrage und Anzeige zusätzlicher Möglichkeiten der 
  2. seriellen (und evtl. sonstiger) Kommunikationsroutinen
  3. ====================================================================
  4.  
  5. Cookie
  6. ------
  7. Name: RSVF  (RS232 Version Fast)
  8. Wert: Zeiger auf Datenstruktur
  9.       Zeiger muβ <>0 sein und auf gerade Adresse weisen
  10.  
  11. Datenstruktur
  12. -------------
  13. Beliebig viele Objekte sind als Liste hintereinander abgelegt. An das Ende 
  14. einer Liste kann über eine Verkettung eine weitere Liste angehängt sein. 
  15. Am Ende der letzten Liste befindet sich eine Ende-Kennung.
  16.  
  17. Objekt
  18. ------
  19. Jedes Objekt ist 8 Byte lang und beginnt auf einer geraden Adresse. 
  20. Byte 0..3 sind ein Zeiger auf den Namen der Schnittstelle (Filename) im 
  21. ASCII-Code. Der Name muß auf einer geraden Adresse beginnen und ist 
  22. nullterminiert.
  23. Byte 4..7 enthalten Angaben über die Eigenschaften des Objektes (der 
  24. Schnittstelle). Noch nicht definierte Bits/Bytes müssen vom anlegenden 
  25. Programm auf 0 gesetzt werden.
  26. Sollten irgendwann zusätzliche Informationen nötig werden, so wird deren 
  27. Vorhandensein auf noch zu definierende Weise in Byte 4..7 angezeigt. Die 
  28. Informationen selbst liegen dann vor dem Namen der Schnittstelle.
  29.  
  30. Besondere Objekte
  31. -----------------
  32. Bei besonderen Objekten ist Byte4.Bit7 =0.
  33. Ende-Objekt:
  34.  Byte 0..3  0, ein NIL-Zeiger, kennzeichnet das Ende der Datenstuktur  
  35. Verkettungsobjekt:
  36.  Byte 0..3  Zeiger auf die nächste Liste mit Objekten.
  37.  
  38. Eigenschaftsdefinitionen im Wert
  39. --------------------------------
  40. Byte 4:
  41.  Bit7  =1: dieser Name ist eine Schnittstelle
  42.  Bit6  =1: Schnittstelle ist dem GEMDOS für File-I/O bekannt
  43.  Bit5  =1: Schnittstelle ist dem BIOS bekannt (Bco*-Routinen)
  44.  für den Rest fällt uns noch was ein (Fähigkeiten der Schnittstelle)
  45. Byte 5:
  46.  noch frei 
  47. Byte 6:
  48.  BIOS-Nummer der Schnittstelle (Bco*-Routinen)
  49. Byte 7:
  50.  noch frei
  51.  
  52.  
  53. Sinn und Zweck
  54. --------------
  55. Kommunikationsprogramme können durch RSVF herausfinden, welche 
  56. Schnittstellen für sie geeignet erscheinen. Außerdem erfahren sie die 
  57. Zuordnung von GEMDOS-Gerätetreibername (in U:\DEV\) zur BIOS-Gerätenummer.
  58.  
  59.  
  60. Mindestforderung an Treiber bei gesetztem GEMDOS-Bit
  61. ----------------------------------------------------
  62. Fopen, Fclose, Fread, Fwrite, Fcntl werden behandelt. Falls eine Funktion 
  63. (oder auch Unterfunktion von Fcntl) nicht vorhanden ist, muβ dafür ein 
  64. Fehlercode (mglst. Fehlercode -32 (EINVFN)) geliefert werden.
  65.  
  66. Fopen darf immer nur mit dem vollen Pfad "U:\DEV\devicename" erfolgen. 
  67. Konstruktionen mit Dsetdrv und Dsetpath sind UNZULÄSSIG.
  68.  
  69. Fcntl hat die Funktionsnummer $0104 und die Parameter:
  70. handle, special, subfunction
  71. handle:      16Bit filehandle
  72. special:     32Bit parameter for subfunction
  73. subfunction: 16Bit number of subfunction
  74.  
  75.  
  76. MiNT-kompatible Funktionen der Treiber
  77. --------------------------------------
  78. Fopen für Lesen&Schreiben auf "U:\DEV\MODEM1" und natürlich Fclose.
  79. Fwrite und Fread sind nichtblockierend, d.h. es werden immer nur soviel Byte 
  80. übertragen, wie der serielle Puffer aufnehmen/liefern kann. So sollten auch 
  81. andere Treiber arbeiten.
  82.  
  83. Rückgabewert der Fcntl-Funktionen ist 0 für fehlerfreie Durchführung oder 
  84. ein negativer Fehlercode (32Bit-Wert), falls nicht extra beschrieben.
  85.  
  86. Manche Zeilen sind C, manche Kommentar. Bei den angegebenen 
  87. Funktionsaufrufen handelt es sich wirklich um Musteraufrufe, und nicht etwa 
  88. um mißgestaltete Prototypen.
  89.  
  90.  
  91.  
  92. Ermittlung, wieviel Byte nichtblockierend übertragen werden können
  93. ------------------------------------------------------------------
  94. #define FIONREAD  (('F'<< 8) | 1)
  95. #define FIONWRITE (('F'<< 8) | 2)
  96. long Fcntl( handle, &count, FIONREAD)
  97. long Fcntl( handle, &count, FIONWRITE)
  98. In count wird als 32Bit-Wert die Anzahl der Byte hinterlassen, die beim 
  99. nächsten Fread/Fwrite mindestens gelesen/geschrieben werden können. Da aber 
  100. möglicherweise mehrere Programme auf einen Port schreiben könnten, sollte 
  101. man nur den Returnwert von Fread/Fwrite für voll nehmen. (Anmerkung: meine 
  102. Treiber liefern richtige Werte, mir bekannte MiNT-Versionen aber nur 
  103. entweder 0 oder 1, so daß man unter MiNT momentan hiervon nicht viel hat.)
  104.  
  105.  
  106. Setzen und Rücksetzen von Break
  107. -------------------------------
  108. #define TIOCCBRK (('T'<< 8) | 20)
  109. #define TIOCSBRK (('T'<< 8) | 21)
  110. Fcntl( handle, dummy, TIOCSBRK); /* Break aktivieren */
  111. Fcntl( handle, dummy, TIOCCBRK); /* Break löschen */
  112.  
  113.  
  114. Setzen/Abfragen der Eingabegeschwindigkeit und Steuerung der DTR-Leitung
  115. ------------------------------------------------------------------------
  116. #define TIOCIBAUD (('T'<< 8) | 18)
  117. Fcntl( handle, &speed, TIOCIBAUD);
  118. Setze die Eingabegeschwindigkeit der Schnittstelle. In speed steht ein 
  119. 32Bit-Wert, der die gewünschte Geschwindigkeit unkodiert in Bit pro Sekunde 
  120. angibt. speed = 19200 würde auf 19200bps setzen. In speed wird die 
  121. Geschwindigkeit vor dem Aufruf von TIOCIBAUD zurückgegeben. Ist sie 
  122. unbekannt, wird -1 geliefert. Ist beim Aufruf speed = -1, so wird nur die 
  123. Geschwindigkeit erfragt. Ist speed = 0, so wird das DTR-Signal auf inaktiv 
  124. gebracht (gelöscht), ohne die Geschwindigkeit zu beeinflussen. Bei 
  125. geschwindigkeitssetzendem Aufruf wird DTR automatisch aktiviert. 
  126. Rückgabewert ist ERANGE wenn die Geschwindigkeit nicht einstellbar ist. 
  127. Dann wird als "Ausnahme" in speed die nächstniedrigere mögliche 
  128. Geschwindigkeit geliefert. Gibt es keine nächstniedrige, so wird die 
  129. kleinstmögliche zurückgegeben.
  130.  
  131.  
  132. Setzen/Abfragen der Ausgabegeschwindigkeit und Steuerung der DTR-Leitung 
  133. ------------------------------------------------------------------------
  134. #define TIOCOBAUD (('T'<< 8) | 19) Fcntl( handle, &speed, TIOCOBAUD);
  135. Setze die Ausgabegeschwindigkeit der Schnittstelle. Die 
  136. Funktionsbeschreibung ist identisch zu TIOCIBAUD. Unterstützt eine 
  137. Schnittstelle getrennte Ein- und Ausgabegeschwindigkeit nicht, so 
  138. beeinflußt jeder Aufruf beide Geschwindigkeiten.
  139.  
  140.  
  141. Übertragungsprotokolleinstellungen erfragen
  142. -------------------------------------------
  143. #define TIOCGFLAGS (('T'<< 8) | 22)
  144. Fcntl( handle, &flags, TIOCGFLAGS);
  145. Liefert in flags einen 16Bit-Wert der eingestellten Parameter, die eine 
  146. ODER-Verknüpfung der folgenden Werte darstellen. Alle anderen Bit sind 
  147. reserviert. Bei TIOCGFLAGS sollte man sie ignorieren. Sinnvollerweise 
  148. erfragt man mit TIOCGFLAGS, modifiziert die bekannten Werte, und setzt dann 
  149. per TIOCSFLAGS.
  150.  
  151. /* Anzahl der Stoppbits */
  152. #define TF_STOPBITS 0x0003
  153. /* 0x0000  nicht erlaubt (Anmerkung: Meine Wenigkeit schlägt vor, damit
  154.            einen evtl. vorhandenen Synchronmode zu aktivieren.) */
  155. #define TF_1STOP   0x0001 /* 1 Stoppbit */
  156. #define TF_15STOP  0x0002 /* 1.5 Stoppbit */
  157. #define    TF_2STOP   0x0003 /* 2 Stoppbit */
  158.  
  159. /* Anzahl der Bits pro Zeichen */
  160. #define TF_CHARBITS 0x000C
  161. #define TF_8BIT    0x0 /* 8 Bit */
  162. #define TF_7BIT    0x4
  163. #define TF_6BIT    0x8
  164. #define TF_5BIT    0xC /* 5 Bit */
  165.  
  166. /* Handshakemodi und Parität */
  167. #define TF_FLAG  0xF000
  168. #define T_TANDEM 0x1000 /* XON/XOFF (=^Q/^S) Flußkontrolle aktiv */
  169. #define T_RTSCTS 0x2000 /* RTS/CTS Flußkontrolle aktiv */
  170. #define T_EVENP  0x4000 /* even (gerade) Parität aktiv */
  171. #define T_ODDP   0x8000 /* odd (ungerade) Parität aktiv */
  172. /* even und odd schließen sich gegenseitig aus */
  173.  
  174.  
  175. Übertragungsprotokolleinstellungen setzen
  176. -----------------------------------------
  177. #define TIOCSFLAGS (('T'<< 8) | 23)
  178. Fcntl( handle, &flags, TIOCSFLAGS);
  179. Setzt die Einstellungen, Beschreibung dieser bei TIOCGFLAGS. Rückgabewert 
  180. ist ERANGE bei illegaler / nicht unterstützer Kombination in flags.
  181.  
  182.  
  183. Weitere Funktionen
  184. ------------------
  185. Erweiterte Funktionen zum Einstellen der Schnittstelle, zur Überwachung 
  186. der Signalleitungen (z.B. DCD, RING), zum Löschen der Sende- und 
  187. Empfangspuffer sind im Textfile
  188.  
  189. SERSOFST.TXT
  190.  
  191. definiert. Einige werden von meinen Treibern schon unterstützt. Siehe 
  192. SERSOFST.TXT zu Einzelheiten und zum Status dieses (noch? nicht 
  193. Atari-offiziellen) Standards. Wer besonders dringend die eine oder andere 
  194. Funktion braucht, darf sich gern mit mir in Verbindung setzen. 
  195.  
  196.  
  197. Harun Scheutzow, 16.05.1993
  198. letzte Änderung: 21.11.1993
  199.  
  200. Harun_Scheutzow@B.maus.de
  201.  
  202. Harun Scheutzow
  203. Dresdener Straße 83
  204. D-10179 Berlin, Deutschland
  205.  
  206.